Plot and fit distributions of variables

Histogram of Velocity of all

Log distribution, 0’s make up 3% of all data

CC.TotalData <- na.omit(TotalData)
head(CC.TotalData)
10^mean(log10(CC.TotalData$v[CC.TotalData$v>0]))
[1] 0.03502632
sd(log10(CC.TotalData$v[CC.TotalData$v>0]))
[1] 0.5358195

Now we’re going to plot each unique krill and their bimodality with a dip test (less than 0.05 is multimodality)

for (i in 1:length(ind)){
jpeg(filename=paste(ind[i]+".jpg"), width = 480, height = 480)
 hist(log10(CC.TotalData$v[CC.TotalData$D_V_T==ind[i]]),
     breaks = 50,
     xlab = "Velocity (Log^10 mm/s)",
     main = ind[i])
dev.off()
}
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors
Warning in Ops.factor(ind[i], ".jpg") : ‘+’ not meaningful for factors

Now looking at turning angles

for (i in 1:length(ind)){
jpeg(filename=paste(ind[i], '.jpeg', sep = ''), width = 480, height = 480)
hist(CC.TotalData$turn.angle[CC.TotalData$D_V_T==ind[i]],
       breaks = 50,
     xlab = "Turn Angles",
     main = ind[i]) 
dev.off
}
Error in jpeg(filename = paste(ind[i], ".jpeg", sep = ""), width = 480,  : 
  too many open devices

Starting to look at bimodality in the variables by merging the TotalData frame with the “tab” table

save.image("~/Post-doc/Data/Total Merged Data File (Dec 6 2021).RData")
LS0tDQp0aXRsZTogIkNoZWNraW5nIERpc3RyaWJ1dGlvbiBmb3IgVmFyaWFibGVzIg0Kb3V0cHV0OiBodG1sX25vdGVib29rDQotLS0NCg0KUGxvdCBhbmQgZml0IGRpc3RyaWJ1dGlvbnMgb2YgdmFyaWFibGVzDQoNCmBgYHtyfQ0KDQpsb2FkKCJDOlxcVXNlcnNcXE5pY29sZSBIZWxsZXNzZXlcXERvY3VtZW50c1xcUG9zdC1kb2NcXERhdGFcXFRvdGFsIERhdGEgTWVyZ2VkIEZpbGUgKE5vdiAyIDIwMjEpLlJkYSIpDQoNCmhpc3QobG9nMTAoVG90YWxEYXRhJHYpLA0KICAgICB4bGFiID0gIlZlbG9jaXR5IChMb2deMTAgbW0vcykiKQ0KDQpgYGANCg0KSGlzdG9ncmFtIG9mIFZlbG9jaXR5IG9mIGFsbA0KDQpMb2cgZGlzdHJpYnV0aW9uLCAwJ3MgbWFrZSB1cCAzJSBvZiBhbGwgZGF0YQ0KDQpgYGB7cn0NCkNDLlRvdGFsRGF0YSA8LSBuYS5vbWl0KFRvdGFsRGF0YSkNCmhlYWQoQ0MuVG90YWxEYXRhKQ0KMTBebWVhbihsb2cxMChDQy5Ub3RhbERhdGEkdltDQy5Ub3RhbERhdGEkdj4wXSkpDQpzZChsb2cxMChDQy5Ub3RhbERhdGEkdltDQy5Ub3RhbERhdGEkdj4wXSkpDQoNCmBgYA0KTm93IHdlJ3JlIGdvaW5nIHRvIHBsb3QgZWFjaCB1bmlxdWUga3JpbGwgYW5kIHRoZWlyIGJpbW9kYWxpdHkgd2l0aCBhIGRpcCB0ZXN0IChsZXNzIHRoYW4gMC4wNSBpcyBtdWx0aW1vZGFsaXR5KQ0KDQpgYGB7cn0NCmluZCA8LSB1bmlxdWUoQ0MuVG90YWxEYXRhJERfVl9UKQ0KcHJpbnQoaW5kKQ0KbGVuZ3RoKGluZCkNCmxpYnJhcnkoZGlwdGVzdCkNCmxpYnJhcnkoRGVzY1Rvb2xzKQ0KDQp0YWIgPC0gbWF0cml4KGRhdGEgPSBOQSwgbnJvdyA9IDEzMywgbmNvbCA9NSwgYnlyb3cgPSBUKQ0KY29sbmFtZXModGFiKSA8LSBjKCdkaXAudGVzdCcsICdza2V3JywgJ21lYW4udmVsb2NpdHknLCAnc2QudmVsb2NpdHknLCAnSW5kJykNCg0KdGFiIDwtIGFzLmRhdGEuZnJhbWUodGFiKQ0KdGFiJEluZCA8LSBpbmQNCm1lYW4udmVsIDwtIE5VTEwNCnNkLnZlbCA8LSBOVUxMDQpkLnYgPC0gTlVMTA0Kcy52IDwtIE5VTEwNCg0KZm9yIChpIGluIDE6bGVuZ3RoKGluZCkpew0KbWVhbi52IDwtIG1lYW4oQ0MuVG90YWxEYXRhJHZbQ0MuVG90YWxEYXRhJERfVl9UPT1pbmRbaV1dKQ0Kc2QudiA8LSBzZChDQy5Ub3RhbERhdGEkdltDQy5Ub3RhbERhdGEkRF9WX1Q9PWluZFtpXV0pDQoNCm1lYW4udmVsIDwtIHJiaW5kKG1lYW4udmVsLCBtZWFuLnYpDQpzZC52ZWwgPC0gcmJpbmQoc2QudmVsLCBzZC52KQ0KDQoNCnZlbHMgPC0gKENDLlRvdGFsRGF0YSR2W0NDLlRvdGFsRGF0YSREX1ZfVD09aW5kW2ldXSkNCnZlbHMgPC0gbG9nMTAodmVsc1t2ZWxzPjBdKQ0KZCA8LSBkaXAudGVzdCh2ZWxzKQ0KZC5wIDwtIGQkcC52YWx1ZQ0KZC52IDwtIHJiaW5kKGQudiwgZC5wKQ0KDQpzIDwtIFNrZXcodmVscykNCnMudiA8LSByYmluZChzLnYsIHMpDQojI30NCg0KIyNpbmQgPC0gdW5pcXVlKENDLlRvdGFsRGF0YSREX1ZfVCkNCg0KIyNmb3IgKGkgaW4gMTpsZW5ndGgoaW5kKSl7DQogaGlzdChsb2cxMChDQy5Ub3RhbERhdGEkdltDQy5Ub3RhbERhdGEkRF9WX1Q9PWluZFtpXV0pLA0KICAgICBicmVha3MgPSA1MCwNCiAgICAgeGxhYiA9ICJWZWxvY2l0eSAoTG9nXjEwIG1tL3MpIiwNCiAgICAgbWFpbiA9IGluZFtpXSwNCiAgICAgc3ViID0gZC5wKSAgIyMgY2hhbmdlIHRvIGQucCBvciBzIHRvIHByaW50IHRoZSBkaXAgdGVzdCBvciBza2V3IHZhbHVlIGFzIHRoZSB0aXRsZSBpbnN0ZWFkDQp9DQoNCiMjIHRvIHNhdmUgZWFjaCBpbmQgZ3JhcGggdG8gd29ya2luZyBkaXJlY3RvcnkNCmZvciAoaSBpbiAxOmxlbmd0aChpbmQpKXsNCiAganBlZyhmaWxlbmFtZT1wYXN0ZShpbmRbaV0sICcuanBlZycsIHNlcCA9ICcnKSwgd2lkdGggPSA0ODAsIGhlaWdodCA9IDQ4MCkNCiBoaXN0KGxvZzEwKENDLlRvdGFsRGF0YSR2W0NDLlRvdGFsRGF0YSREX1ZfVD09aW5kW2ldXSksDQogICAgIGJyZWFrcyA9IDUwLA0KICAgICB4bGFiID0gIlZlbG9jaXR5IChMb2deMTAgbW0vcykiLA0KICAgICBtYWluID0gaW5kW2ldKQ0KZGV2Lm9mZigpDQp9DQoNCnRhYiRza2V3IDwtIHMudg0KdGFiJGRpcC50ZXN0IDwtIGQudg0KdGFiJG1lYW4udmVsb2NpdHkgPC0gKGxvZzEwKG1lYW4udmVsKSkNCnRhYiRzZC52ZWxvY2l0eSA8LSAobG9nMTAoc2QudmVsKSkNCnRhYg0Kd3JpdGUudGFibGUodGFiLCBmaWxlID0gIn4vUG9zdC1kb2MvRGF0YS9kaXAudGVzdC5za2V3LnZlbHMuY3N2Iiwgc2VwID0gIiwiLCBjb2wubmFtZXMgPSBUUlVFKQ0KDQpwbG90KHRhYikNCg0KDQpoZWFkKFRvdGFsRGF0YSkNCnN0cihUb3RhbERhdGEpDQpUb3RhbERhdGEkRmxvdy5yYXRlIDwtIGFzLmZhY3RvcihUb3RhbERhdGEkRmxvdy5yYXRlKQ0KVG90YWxEYXRhJENobG9yb3BoeWxsIDwtIGFzLmZhY3RvcihUb3RhbERhdGEkQ2hsb3JvcGh5bGwpDQoNCmBgYA0KDQoNCk5vdyBsb29raW5nIGF0IHR1cm5pbmcgYW5nbGVzDQoNCmBgYHtyfQ0KVG90YWxEYXRhJHR1cm4uYW5nbGV4eSA8LSBhdGFuMihUb3RhbERhdGEkWCwgVG90YWxEYXRhJFkpDQpUb3RhbERhdGEkdHVybi5hbmdsZXl6IDwtIGF0YW4yKFRvdGFsRGF0YSRZLCBUb3RhbERhdGEkWikNCg0KDQpsdGggPC0gZGltKFRvdGFsRGF0YSlbMV0NCmR4MSA8LSBUb3RhbERhdGEkZHhbMToobHRoLTEpXQ0KZHgyIDwtIFRvdGFsRGF0YSRkeFsyOmx0aF0NCmR5MSA8LSBUb3RhbERhdGEkZHlbMToobHRoLTEpXQ0KZHkyIDwtIFRvdGFsRGF0YSRkeVsyOmx0aF0NCmR6MSA8LSBUb3RhbERhdGEkZHpbMToobHRoLTEpXQ0KZHoyIDwtIFRvdGFsRGF0YSRkelsyOmx0aF0NCkQgPC0gKGR4MSpkeDIpKyhkeTEqZHkyKSsoZHoxKmR6MikNCmQxIDwtIHNxcnQoZHgxXjIgKyBkeTFeMiArZHoxXjIpDQpkMiA8LSBzcXJ0KGR4Ml4yICsgZHkyXjIgK2R6Ml4yKQ0KDQpkZCA8LSBEL2QxL2QyDQpoaXN0KGFjb3MoZGQpL3BpKjE4MCkNCg0KVG90YWxEYXRhJHR1cm4uYW5nbGUgPC0gYyhOQSwgYWNvcyhEL2QxL2QyKSkvcGkqMTgwDQpoZWFkKFRvdGFsRGF0YSkNCkNDLlRvdGFsRGF0YSA8LSBuYS5vbWl0KFRvdGFsRGF0YSkNCmhlYWQoQ0MuVG90YWxEYXRhKQ0KdGFpbChDQy5Ub3RhbERhdGEpDQpzdHIoQ0MuVG90YWxEYXRhKQ0KQ0MuVG90YWxEYXRhJEZsb3cucmF0ZSA8LSBhcy5jaGFyYWN0ZXIoQ0MuVG90YWxEYXRhJEZsb3cucmF0ZSkNCkNDLlRvdGFsRGF0YSRDaGxvcm9waHlsbDwtIGFzLmNoYXJhY3RlcihDQy5Ub3RhbERhdGEkQ2hsb3JvcGh5bGwpDQpDQy5Ub3RhbERhdGEkR3Vhbm8gPC0gYXMuY2hhcmFjdGVyKENDLlRvdGFsRGF0YSRHdWFubykNCkNDLlRvdGFsRGF0YSRMaWdodCA8LSBhcy5jaGFyYWN0ZXIoQ0MuVG90YWxEYXRhJExpZ2h0KQ0KDQoNCkNDLlRvdGFsRGF0YSRGbG93LnJhdGUgPC0gYXMubnVtZXJpYyhDQy5Ub3RhbERhdGEkRmxvdy5yYXRlKQ0KQ0MuVG90YWxEYXRhJENobG9yb3BoeWxsPC0gYXMubnVtZXJpYyhDQy5Ub3RhbERhdGEkQ2hsb3JvcGh5bGwpDQoNCmhlYWQoQ0MuVG90YWxEYXRhKQ0KDQppbmQgPC0gdW5pcXVlKENDLlRvdGFsRGF0YSREX1ZfVCkNCg0KIyMgdG8gc2F2ZSBpbmQgaGlzdG9ncmFtIHBsb3RzDQpmb3IgKGkgaW4gMTpsZW5ndGgoaW5kKSl7DQpqcGVnKGZpbGVuYW1lPXBhc3RlKGluZFtpXSwgJy5qcGVnJywgc2VwID0gJycpLCB3aWR0aCA9IDQ4MCwgaGVpZ2h0ID0gNDgwKQ0KaGlzdChDQy5Ub3RhbERhdGEkdHVybi5hbmdsZVtDQy5Ub3RhbERhdGEkRF9WX1Q9PWluZFtpXV0sDQogICAgIGJyZWFrcyA9IDUwLA0KICAgICB4bGFiID0gIlR1cm4gQW5nbGVzIChkZWdyZWVzKSIsDQogICAgIG1haW4gPSBpbmRbaV0pIA0KZGV2Lm9mZigpDQp9DQoNCnBsb3QoQ0MuVG90YWxEYXRhJEZsb3cucmF0ZSwgQ0MuVG90YWxEYXRhJHR1cm4uYW5nbGUsIG1haW4gPSAiIiwgeGxhYiA9ICJGbG93IFJhdGUgKGNtL3MpIiwgeWxhYiA9ICJUdXJuIGFuZ2xlIChkZWdyZWVzKSIpDQoNCnBsb3QoQ0MuVG90YWxEYXRhJENobG9yb3BoeWxsLCBDQy5Ub3RhbERhdGEkdHVybi5hbmdsZSwgbWFpbiA9ICIiLCB4bGFiID0gIkNobG9yb3BoeWxsIChtZy9MKSIsIHlsYWIgPSAiVHVybiBhbmdsZSAoZGVncmVlcykiKQ0KDQpsaWJyYXJ5KGdncGxvdDIpDQpnZ3Bsb3QoVG90YWxEYXRhLGFlcyh4PUZsb3cucmF0ZSwgeT1sb2cxMCh2KSwgZmlsbD1DaGxvcm9waHlsbCkpKw0KICBnZW9tX2JveHBsb3Qobm90Y2g9Riwgbm90Y2h3aWR0aD0wLjMsb3V0bGllci5zaGFwZT0xLG91dGxpZXIuc2l6ZT0yLCBjb2VmPTEuNSkrDQogIHRoZW1lKGF4aXMudGV4dD1lbGVtZW50X3RleHQoY29sb3I9ImJsYWNrIikpKw0KICB0aGVtZShheGlzLnRleHQueD1lbGVtZW50X3RleHQoYW5nbGU9OTAsaGp1c3Q9MSx2anVzdD0wLjQpKSsNCiAgdGhlbWUocGFuZWwuZ3JpZC5taW5vcj1lbGVtZW50X2JsYW5rKCkpKw0KICBsYWJzKHNpemU9ICIiLHggPSAiRmxvdyBSYXRlIChjbS9zKSIsIHkgPSAiVmVsb2NpdHkgKExvZyB0cmFuc2Zvcm1lZCkobW0vcykiLCB0aXRsZSA9ICJMaWdodCIpICsNCiAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzPWMoImdyZWVueWVsbG93IiwgInllbGxvd2dyZWVuIiwibGlnaHRncmVlbiIsICJncmVlbiIsICJncmVlbjMiLCAiZ3JlZW40IiwgImRhcmtncmVlbiIpLG5hbWUgPSAiQ2hsb3JvcGh5bGwgKG1nL0wpIiwNCiAgICAgICAgICAgICAgICAgICAgbGFiZWxzPWMoIjAiLCAiNC4zIiwgIjQuNiIsICI2LjEiLCAiNy42IiwgIjEzLjUiLCAiMTkiKSkrDQogIGZhY2V0X2dyaWQofkxpZ2h0LCBzY2FsZXMgPSAiZnJlZV94Iiwgc3BhY2UgPSAiZnJlZSIpDQoNCmdncGxvdChUb3RhbERhdGEsYWVzKHg9Rmxvdy5yYXRlLCB5PXR1cm4uYW5nbGUsIGZpbGw9Q2hsb3JvcGh5bGwpKSsNCiAgZ2VvbV9ib3hwbG90KG5vdGNoPUYsIG5vdGNod2lkdGg9MC4zLG91dGxpZXIuc2hhcGU9MSxvdXRsaWVyLnNpemU9MiwgY29lZj0xLjUpKw0KICB0aGVtZShheGlzLnRleHQ9ZWxlbWVudF90ZXh0KGNvbG9yPSJibGFjayIpKSsNCiAgdGhlbWUoYXhpcy50ZXh0Lng9ZWxlbWVudF90ZXh0KGFuZ2xlPTkwLGhqdXN0PTEsdmp1c3Q9MC40KSkrDQogIHRoZW1lKHBhbmVsLmdyaWQubWlub3I9ZWxlbWVudF9ibGFuaygpKSsNCiAgbGFicyhzaXplPSAiIix4ID0gIkZsb3cgUmF0ZSAoY20vcykiLCB5ID0gIlR1cm4gQW5nbGUgKGRlZ3JlZXMpIiwgdGl0bGUgPSAiTGlnaHQiKSArDQogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcz1jKCJncmVlbnllbGxvdyIsICJ5ZWxsb3dncmVlbiIsImxpZ2h0Z3JlZW4iLCAiZ3JlZW4iLCAiZ3JlZW4zIiwgImdyZWVuNCIsICJkYXJrZ3JlZW4iKSxuYW1lID0gIkNobG9yb3BoeWxsIChtZy9MKSIsDQogICAgICAgICAgICAgICAgICAgIGxhYmVscz1jKCIwIiwgIjQuMyIsICI0LjYiLCAiNi4xIiwgIjcuNiIsICIxMy41IiwgIjE5IikpKw0KICBmYWNldF9ncmlkKH5MaWdodCwgc2NhbGVzID0gImZyZWVfeCIsIHNwYWNlID0gImZyZWUiKQ0KDQpgYGANCg0KDQoNCg0KDQoNClN0YXJ0aW5nIHRvIGxvb2sgYXQgYmltb2RhbGl0eSBpbiB0aGUgdmFyaWFibGVzIGJ5IG1lcmdpbmcgdGhlIFRvdGFsRGF0YSBmcmFtZSB3aXRoIHRoZSAidGFiIiB0YWJsZQ0KYGBge3J9DQojI2FnZ3JlZ2F0aW5nIENvbXBsZXRlIGNhc2VzIG9mIFRvdGFsRGF0YSBzbyB3ZSBjYW4gbWVyZ2UgaXQgd2l0aCB0YWIgZGF0YQ0KDQpBR0dfVEQgPC0gYWdncmVnYXRlKENDLlRvdGFsRGF0YSwgYnkgPSBsaXN0KENDLlRvdGFsRGF0YSREX1ZfVCksIEZVTiA9IG1lYW4pDQpoZWFkKEFHR19URCkNCkFHR19URCA8LSBBR0dfVERbIC1jKDI6MywgODoxMCkgXQ0KY29sbmFtZXMoQUdHX1REKSA8LSBjKCJJbmQiLCAiWCIsICJZIiwgIloiLCAiVHJhY2siLCAiRmxvdy5SYXRlIiwgIkNobG9yb3BoeWxsIiwgIkd1YW5vIiwgIkxpZ2h0IiwgImR4IiwgImR5IiwgImR6IiwgImQiLCAidngiLCAidnkiLCAidnoiLCAidiIsICJoZWFkaW5nIiwgInBpdGNoIiwgInR1cm4uYW5nbGV4eSIsICJ0dXJuLmFuZ2xleXoiLCAidHVybi5hbmdsZSIpDQpoZWFkKEFHR19URCkNCnRhaWwoQUdHX1REKQ0KDQoNCnRhYl9BR0cgPC0gbWVyZ2UoQUdHX1RELCB0YWIsIGJ5ID0gIkluZCIpDQpoZWFkKHRhYl9BR0cpDQpzdHIodGFiX0FHRykNCnRhYl9BR0ckRmxvdy5SYXRlIDwtIGFzLmZhY3Rvcih0YWJfQUdHJEZsb3cuUmF0ZSkNCnRhYl9BR0ckQ2hsb3JvcGh5bGwgPC0gYXMuZmFjdG9yKHRhYl9BR0ckQ2hsb3JvcGh5bGwpDQoNCmZyZXEgPC0gdGFibGUodGFiX0FHRyRGbG93LlJhdGUsIHRhYl9BR0ckQ2hsb3JvcGh5bGwpDQpwcmludChmcmVxKQ0KcHJvYiA8LSBwcm9wLnRhYmxlKGZyZXEpICMjUmVsYXRpdmUgRnJlcXVlbmN5IFRhYmxlDQpwcmludCAocHJvYikNCg0KICMjc3RhcnRpbmcgdG8gcGxvdCB0aGUgZGlwIHRlc3QgYW5kIHNrZXcgaW4gdGhlIHZhcmlhYmxlcw0KcGxvdCh0YWJfQUdHJEZsb3cuUmF0ZSwgdGFiX0FHRyRkaXAudGVzdCwgeGxhYiA9ICJGbG93IFJhdGUgKGNtL3MpIiwgeWxhYiA9ICJEaXAgVGVzdCAocC52YWx1ZSkiKQ0KcGxvdCh0YWJfQUdHJEZsb3cuUmF0ZSwgdGFiX0FHRyRza2V3LCB4bGFiID0gIkZsb3cgUmF0ZSAoY20vcykiLCB5bGFiID0gIlNrZXcgVGVzdCAocC52YWx1ZSkiKQ0KcGxvdCh0YWJfQUdHJENobG9yb3BoeWxsLCB0YWJfQUdHJGRpcC50ZXN0LCB4bGFiID0gIkNobG9yb3BoeWxsIChtZy9MKSIsIHlsYWIgPSAiRGlwIFRlc3QgKHAudmFsdWUpIikNCnBsb3QodGFiX0FHRyRDaGxvcm9waHlsbCwgdGFiX0FHRyRza2V3LCB4bGFiID0gIkNobG9yb3BoeWxsIChtZy9MKSIsIHlsYWIgPSAiU2tldyBUZXN0IChwLnZhbHVlKSIpDQoNCg0KIyMgdG8gc2F2ZSBlYWNoIGluZCBncmFwaA0KZm9yIChpIGluIDE6bGVuZ3RoKGluZCkpew0KICBqcGVnKGZpbGVuYW1lPXBhc3RlKGluZFtpXSwgJy5qcGVnJywgc2VwID0gJycpLCB3aWR0aCA9IDQ4MCwgaGVpZ2h0ID0gNDgwKQ0KcGxvdChDQy5Ub3RhbERhdGEkdHVybi5hbmdsZVtDQy5Ub3RhbERhdGEkRF9WX1Q9PWluZFtpXV0sIGxvZzEwKENDLlRvdGFsRGF0YSR2W0NDLlRvdGFsRGF0YSREX1ZfVD09aW5kW2ldXSksDQogICAgICAgICAgICB4bGFiID0gIlR1cm4gQW5nbGVzIChkZWdyZWVzKSIsDQogICAgIHlsYWIgPSAiVmVsb2NpdHkgKExPZ14xMCwgbW0vcykiLA0KICAgICAgICAgIG1haW4gPSBpbmRbaV0pIA0KZGV2Lm9mZigpDQp9DQpgYGANCg0KDQpgYGB7cn0NCnNhdmUuaW1hZ2UoIn4vUG9zdC1kb2MvRGF0YS9Ub3RhbCBNZXJnZWQgRGF0YSBGaWxlIChEZWMgNiAyMDIxKS5SRGF0YSIpDQoNCmBgYA0KDQoNCg0K